{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Alphalens Analysis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:32:54.713256Z",
     "start_time": "2020-06-17T19:32:54.710356Z"
    }
   },
   "outputs": [],
   "source": [
    "import warnings\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:32:55.903518Z",
     "start_time": "2020-06-17T19:32:54.716213Z"
    }
   },
   "outputs": [],
   "source": [
    "from pathlib import Path\n",
    "import pandas as pd\n",
    "from alphalens.tears import create_summary_tear_sheet\n",
    "from alphalens.utils import get_clean_factor_and_forward_returns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:32:55.912413Z",
     "start_time": "2020-06-17T19:32:55.908685Z"
    }
   },
   "outputs": [],
   "source": [
    "idx = pd.IndexSlice"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Load Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:32:56.164642Z",
     "start_time": "2020-06-17T19:32:55.919064Z"
    }
   },
   "outputs": [],
   "source": [
    "with pd.HDFStore('data.h5') as store:\n",
    "    lr_predictions = store['lr/predictions']\n",
    "    lasso_predictions = store['lasso/predictions']\n",
    "    lasso_scores = store['lasso/scores']\n",
    "    ridge_predictions = store['ridge/predictions']\n",
    "    ridge_scores = store['ridge/scores']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:32:56.170797Z",
     "start_time": "2020-06-17T19:32:56.167335Z"
    }
   },
   "outputs": [],
   "source": [
    "DATA_STORE = Path('..', 'data', 'assets.h5')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:32:56.180509Z",
     "start_time": "2020-06-17T19:32:56.172341Z"
    }
   },
   "outputs": [],
   "source": [
    "def get_trade_prices(tickers, start, stop):\n",
    "    prices = (pd.read_hdf(DATA_STORE, 'quandl/wiki/prices').swaplevel().sort_index())\n",
    "    prices.index.names = ['symbol', 'date']\n",
    "    prices = prices.loc[idx[tickers, str(start):str(stop)], 'adj_open']\n",
    "    return (prices\n",
    "            .unstack('symbol')\n",
    "            .sort_index()\n",
    "            .shift(-1)\n",
    "            .tz_localize('UTC'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:32:56.188828Z",
     "start_time": "2020-06-17T19:32:56.182608Z"
    }
   },
   "outputs": [],
   "source": [
    "def get_best_alpha(scores):\n",
    "    return scores.groupby('alpha').ic.mean().idxmax()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:32:56.201156Z",
     "start_time": "2020-06-17T19:32:56.191362Z"
    }
   },
   "outputs": [],
   "source": [
    "def get_factor(predictions):\n",
    "    return (predictions.unstack('symbol')\n",
    "            .dropna(how='all')\n",
    "            .stack()\n",
    "            .tz_localize('UTC', level='date')\n",
    "            .sort_index())    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Linear Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:32:56.264394Z",
     "start_time": "2020-06-17T19:32:56.202640Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "date                       symbol\n",
       "2014-12-09 00:00:00+00:00  AAL       0.001839\n",
       "                           AAPL     -0.001534\n",
       "                           ABBV      0.001316\n",
       "                           AGN       0.002175\n",
       "                           AIG      -0.000336\n",
       "dtype: float64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_factor = get_factor(lr_predictions.predicted.swaplevel())\n",
    "lr_factor.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:32:56.276852Z",
     "start_time": "2020-06-17T19:32:56.269022Z"
    }
   },
   "outputs": [],
   "source": [
    "tickers = lr_factor.index.get_level_values('symbol').unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:33:26.037231Z",
     "start_time": "2020-06-17T19:32:56.283251Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "DatetimeIndex: 1007 entries, 2014-01-02 00:00:00+00:00 to 2017-12-29 00:00:00+00:00\n",
      "Columns: 257 entries, AAL to YUM\n",
      "dtypes: float64(257)\n",
      "memory usage: 2.0 MB\n"
     ]
    }
   ],
   "source": [
    "trade_prices = get_trade_prices(tickers, 2014, 2017)\n",
    "trade_prices.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:33:29.084779Z",
     "start_time": "2020-06-17T19:33:26.038341Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dropped 0.0% entries from factor data: 0.0% in forward returns computation and 0.0% in binning phase (set max_loss=0 to see potentially suppressed Exceptions).\n",
      "max_loss is 35.0%, not exceeded: OK!\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 74054 entries, (Timestamp('2014-12-09 00:00:00+0000', tz='UTC'), 'AAL') to (Timestamp('2017-11-29 00:00:00+0000', tz='UTC'), 'XOM')\n",
      "Data columns (total 6 columns):\n",
      " #   Column           Non-Null Count  Dtype  \n",
      "---  ------           --------------  -----  \n",
      " 0   1D               74054 non-null  float64\n",
      " 1   5D               74054 non-null  float64\n",
      " 2   10D              74054 non-null  float64\n",
      " 3   21D              74054 non-null  float64\n",
      " 4   factor           74054 non-null  float64\n",
      " 5   factor_quantile  74054 non-null  int64  \n",
      "dtypes: float64(5), int64(1)\n",
      "memory usage: 3.7+ MB\n"
     ]
    }
   ],
   "source": [
    "lr_factor_data = get_clean_factor_and_forward_returns(factor=lr_factor,\n",
    "                                                      prices=trade_prices,\n",
    "                                                      quantiles=5,\n",
    "                                                      periods=(1, 5, 10, 21))\n",
    "lr_factor_data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:33:45.881571Z",
     "start_time": "2020-06-17T19:33:29.089016Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Quantiles Statistics\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>min</th>\n",
       "      <th>max</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>count</th>\n",
       "      <th>count %</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>factor_quantile</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.046824</td>\n",
       "      <td>0.008700</td>\n",
       "      <td>-0.003150</td>\n",
       "      <td>0.004048</td>\n",
       "      <td>14982</td>\n",
       "      <td>20.231183</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.015561</td>\n",
       "      <td>0.010754</td>\n",
       "      <td>-0.000985</td>\n",
       "      <td>0.003357</td>\n",
       "      <td>14877</td>\n",
       "      <td>20.089394</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.013413</td>\n",
       "      <td>0.012631</td>\n",
       "      <td>0.000134</td>\n",
       "      <td>0.003347</td>\n",
       "      <td>14336</td>\n",
       "      <td>19.358846</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.011913</td>\n",
       "      <td>0.014850</td>\n",
       "      <td>0.001203</td>\n",
       "      <td>0.003457</td>\n",
       "      <td>14877</td>\n",
       "      <td>20.089394</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>-0.010072</td>\n",
       "      <td>0.038540</td>\n",
       "      <td>0.003289</td>\n",
       "      <td>0.004285</td>\n",
       "      <td>14982</td>\n",
       "      <td>20.231183</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                      min       max      mean       std  count    count %\n",
       "factor_quantile                                                          \n",
       "1               -0.046824  0.008700 -0.003150  0.004048  14982  20.231183\n",
       "2               -0.015561  0.010754 -0.000985  0.003357  14877  20.089394\n",
       "3               -0.013413  0.012631  0.000134  0.003347  14336  19.358846\n",
       "4               -0.011913  0.014850  0.001203  0.003457  14877  20.089394\n",
       "5               -0.010072  0.038540  0.003289  0.004285  14982  20.231183"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Returns Analysis\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>1D</th>\n",
       "      <th>5D</th>\n",
       "      <th>10D</th>\n",
       "      <th>21D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Ann. alpha</th>\n",
       "      <td>0.033</td>\n",
       "      <td>0.020</td>\n",
       "      <td>0.009</td>\n",
       "      <td>0.005</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>beta</th>\n",
       "      <td>-0.012</td>\n",
       "      <td>-0.080</td>\n",
       "      <td>-0.058</td>\n",
       "      <td>0.019</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mean Period Wise Return Top Quantile (bps)</th>\n",
       "      <td>1.540</td>\n",
       "      <td>0.698</td>\n",
       "      <td>-0.073</td>\n",
       "      <td>0.209</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mean Period Wise Return Bottom Quantile (bps)</th>\n",
       "      <td>-2.804</td>\n",
       "      <td>-0.755</td>\n",
       "      <td>-0.532</td>\n",
       "      <td>-0.678</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mean Period Wise Spread (bps)</th>\n",
       "      <td>4.344</td>\n",
       "      <td>1.481</td>\n",
       "      <td>0.477</td>\n",
       "      <td>0.877</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                  1D     5D    10D    21D\n",
       "Ann. alpha                                     0.033  0.020  0.009  0.005\n",
       "beta                                          -0.012 -0.080 -0.058  0.019\n",
       "Mean Period Wise Return Top Quantile (bps)     1.540  0.698 -0.073  0.209\n",
       "Mean Period Wise Return Bottom Quantile (bps) -2.804 -0.755 -0.532 -0.678\n",
       "Mean Period Wise Spread (bps)                  4.344  1.481  0.477  0.877"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Information Analysis\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>1D</th>\n",
       "      <th>5D</th>\n",
       "      <th>10D</th>\n",
       "      <th>21D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>IC Mean</th>\n",
       "      <td>0.020</td>\n",
       "      <td>0.014</td>\n",
       "      <td>0.013</td>\n",
       "      <td>0.016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>IC Std.</th>\n",
       "      <td>0.181</td>\n",
       "      <td>0.168</td>\n",
       "      <td>0.169</td>\n",
       "      <td>0.157</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Risk-Adjusted IC</th>\n",
       "      <td>0.112</td>\n",
       "      <td>0.085</td>\n",
       "      <td>0.079</td>\n",
       "      <td>0.101</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t-stat(IC)</th>\n",
       "      <td>3.064</td>\n",
       "      <td>2.325</td>\n",
       "      <td>2.161</td>\n",
       "      <td>2.752</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>p-value(IC)</th>\n",
       "      <td>0.002</td>\n",
       "      <td>0.020</td>\n",
       "      <td>0.031</td>\n",
       "      <td>0.006</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>IC Skew</th>\n",
       "      <td>0.015</td>\n",
       "      <td>-0.025</td>\n",
       "      <td>-0.050</td>\n",
       "      <td>-0.062</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>IC Kurtosis</th>\n",
       "      <td>-0.138</td>\n",
       "      <td>-0.182</td>\n",
       "      <td>-0.143</td>\n",
       "      <td>-0.278</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     1D     5D    10D    21D\n",
       "IC Mean           0.020  0.014  0.013  0.016\n",
       "IC Std.           0.181  0.168  0.169  0.157\n",
       "Risk-Adjusted IC  0.112  0.085  0.079  0.101\n",
       "t-stat(IC)        3.064  2.325  2.161  2.752\n",
       "p-value(IC)       0.002  0.020  0.031  0.006\n",
       "IC Skew           0.015 -0.025 -0.050 -0.062\n",
       "IC Kurtosis      -0.138 -0.182 -0.143 -0.278"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Turnover Analysis\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>1D</th>\n",
       "      <th>5D</th>\n",
       "      <th>10D</th>\n",
       "      <th>21D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Quantile 1 Mean Turnover</th>\n",
       "      <td>0.297</td>\n",
       "      <td>0.520</td>\n",
       "      <td>0.621</td>\n",
       "      <td>0.728</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Quantile 2 Mean Turnover</th>\n",
       "      <td>0.517</td>\n",
       "      <td>0.707</td>\n",
       "      <td>0.761</td>\n",
       "      <td>0.788</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Quantile 3 Mean Turnover</th>\n",
       "      <td>0.570</td>\n",
       "      <td>0.738</td>\n",
       "      <td>0.779</td>\n",
       "      <td>0.808</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Quantile 4 Mean Turnover</th>\n",
       "      <td>0.515</td>\n",
       "      <td>0.705</td>\n",
       "      <td>0.755</td>\n",
       "      <td>0.783</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Quantile 5 Mean Turnover</th>\n",
       "      <td>0.302</td>\n",
       "      <td>0.536</td>\n",
       "      <td>0.645</td>\n",
       "      <td>0.745</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                              1D     5D    10D    21D\n",
       "Quantile 1 Mean Turnover   0.297  0.520  0.621  0.728\n",
       "Quantile 2 Mean Turnover   0.517  0.707  0.761  0.788\n",
       "Quantile 3 Mean Turnover   0.570  0.738  0.779  0.808\n",
       "Quantile 4 Mean Turnover   0.515  0.705  0.755  0.783\n",
       "Quantile 5 Mean Turnover   0.302  0.536  0.645  0.745"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>1D</th>\n",
       "      <th>5D</th>\n",
       "      <th>10D</th>\n",
       "      <th>21D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Mean Factor Rank Autocorrelation</th>\n",
       "      <td>0.818</td>\n",
       "      <td>0.542</td>\n",
       "      <td>0.386</td>\n",
       "      <td>0.238</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                     1D     5D    10D    21D\n",
       "Mean Factor Rank Autocorrelation  0.818  0.542  0.386  0.238"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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zXHx4kUEBARAT08PvXv31nZ4RERERERUgel80pSbm4utW7fC19cXEyZMAAC0bdsWMTEx2L17N5MmIiIiIiLSKJ1PmvT09LBr1y5UrVpVpVxfXx8ZGRlaioqIiIiIiCoLnU+axGIxnJycAOTNbUpKSkJoaCgiIiKwYMECLUdHREREREQVnUihUHw0y2qcOHEC//jHPwAAnTt3xsqVK2FkZCRY/W/evEFi4gvk5uYKVifl9QrWqFEdFhYW2g6FiIiIiKjEPqqkKS4uDs+fP8eDBw+wcuVKNG7cGDt37lTr2KSktGKXXczMTEdqagqqVrWBvr4BRCKRUGF/1CQSMaRSeamPVygUyM3NwevXL2Fubglj48LXvicCABsbc7x8martMKiSYHuj8sT2RuWNba7kxGIRrK3NCt2m88Pz3mVvbw97e3u0atUKZmZmmDVrFm7evAlXV9cy152W9hpVq9rAwMBQgEgpn0gkgoGBIapWtcGbN6+YNBERERHRR0fn79P0+vVrhIWFITExUaX8008/BYAC5aUlk0mhr28gSF1UkL6+AWQyqbbDICIiIiIqMZ1PmuRyOb799lvs27dPpfzKlSsAgIYNGwp2Lg7J0xw+t0RERET0sdL54XlWVlbw8/PDxo0bYWRkBBcXF1y/fh0bNmzAF198gfr162s7RCIiItIBplWMYWIo3FebjGwp0t9mClYfEX28dD5pAoDAwEDUrFkTBw8exOrVq2Fra4spU6bgyy+/1HZoREREpCNMDCUQBxwRrD55cD+kC1YbEX3MPoqkSV9fH1999RW++uqrcj+30L9alYZQv3Q9fPgAX345AgcOhKN69RoAgMWLv8fx40eV+4hEIhgZGcHOzh6enr3h6+uHj2AUJxERERGRxnwUSZM2Cf2rVWkI8UtXbOwTzJw5DTKZrMC26tVrYMGCJQAAhUKO1NRUXLt2FevXr0ZMTDQWLlwKsZiJExERERFVTkyaKjipVIrw8ENYv34NJJLCX259fX04O7uolLVr1wF169ZFcPASnDx5HD179imPcImIiIiIdA67Dyq427dvYd26VfDxGYoJE6aU6NgBAwajRg1bhIcf0lB0RERERES6j0lTBVe3bj3s338YY8aMg56eXomOFYlEcHNrhbt3YyCV8h5LRERERFQ5MWmq4KysrGFpaVWG460glUrx9u0bAaMiIiIiIvp4MGkiIiIiIiIqBpMmKtbLly9gYGCAKlUstB0KEREREZFWMGmiIslkMty8eQNNmrgUufIeEREREVFFx6SJinTkSBhevEjEwIFDtB0KEREREZHWsPuAkJubi5iYOwDybm779u1bREVdQ2jofvTo4Ylu3XpoOUIiIiIiIu1h0vQBGdlSyIP7aT0GTXrxIhH+/qOVj01MTOHo6Ihvv52LPn36Qi7X6OmJiIiIiHQak6YPSH+biXRtByGQ3r37oXdv1QTwu+++x3fffV/kMWKxGHJmTURERERUiXFOExERERERUTGYNBERERERERWDSQkgIbkAACAASURBVBMREREREVExmDQREREREREVg0kTERERERFRMZg0ERERERERFYNJExERERERUTGYNBERERERERWDSRMREREREVExmDQREREREREVQ6LtAHSdpYUeJAYmWo1BmpOBlDey0h0rlcLD4zPk5GSrlBsbG+PUqUtYvPh7HD9+VFkuEolgZGQEOzt7eHr2hq+vH5hbExEREVFlxqTpAyQGJni8wkCrMdSbmgMgtVTHxsY+RU5ONr777nvY29dRluvp/S8Rql69BhYsWAIAUCjkSE1NxbVrV7F+/WrExERj4cKlEIuZOBERERFR5cSkqYL766+HEIvF6NKlO4yMjArdR19fH87OLipl7dp1QN26dREcvAQnTx5Hz559yiNcIiIiIiKdw+6DCu6vvx6gVq3aRSZMxRkwYDBq1LBFePghDURGRERERPRxYNJUwf3110MYGOhj+vQp6NGjI3r27IJlyxYjIyP9g8eKRCK4ubXC3bsxkEql5RAtEREREZHu4fC8Cu6vvx4iPT0N/fp9jhEjRuP+/bvYunUTYmOfYvXqDR883srKClKpFG/fvoGVlXU5RExEREREpFuYNFVw//xnEKpUsYCj4ycAgObNW8DKyhoLFsxFVFSklqMjIiIiItJ9TJoqOFdXtwJlbdt2AAA8fPjwg8e/fPkCBgYGqFLFQvDYiIiIiIg+BpzTVIGlpCTjyJEwJCTEq5RnZ+fds6lq1arFHi+TyXDz5g00aeICiYT5NRERERFVTkyaKjCRSIwffwxCaOh+lfKzZ09CT08PTZs2L/b4I0fC8OJFIgYOHKLJMImIiIiIdBq7DyqwqlWrYtCgL3Dw4D6YmJiiWTNX3LkTjZ07t2LQIC/Urm0P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aZvaSVNISAgWLVoEALC2toaBgXBjLomIiIiIiHSV2knTzp070ahRI2zatAnVqlXTZExEREREREQ6Q+05TX///Te8vb2ZMBERERERUaWidtLk4OCAV69eaTIWIiIiIiIinaN20jRu3Djs2rULDx8+1GQ8REREREREOkXtOU3Xr1+HqakpBgwYgHr16sHKygoikUhlH66eR0REREREFY3aSdOlS5cAALa2tsjMzERCQoLGgiIiIiIiItIVaidNBw8ehJWVlSZjISIiIiIi0jlqJ02DBg2Cl5cXJk6cqMl4iEjDTKsYw8SwRPe1LlJGthTpbzMFqYuIiIhIV6n9zSk5OZnLjRNVACaGEogDjghSlzy4H9IFqYmIiIhId6m9el6/fv2wb98+xMfHazIeIiIiIiIinaJ2T5NYLMajR4/g6ekJBwcHWFtbQyxWzbm4eh4REREREVU0aidNV65cgaWlJQAgOzsbz54901hQREREREREukLtpOns2bOajIOIiIiIiEgnqT2niYiIiIiIqDJSu6dpxIgRau23c+fOUgdDRERERESka9ROmgpbNU8ulyMlJQXZ2dmws7NDgwYNBA2OiIiIiIhI28o8p0kmk+HMmTOYM2cOxo4dK1hgREREREREukDtpKkoenp68PDwQHR0NIKDg7Fv3z4h4iIiIiIiIh1gaa4HiZGJYPVJszKQkioTrL7yUOakKV/dunWxe/duoaojIiIiIiIdIDEywd2RIsHq+3SHAkhNFay+8iDI6nk5OTkIDw+HtbW1ENURERERERHpjDKvnpeTk4PHjx/j7du3mDJlimCBERERERER6YIyrZ4H5M1pql+/Pvr27Qs/Pz/BAnvX0aNHsW7dOsTFxcHOzg7jx4/HwIEDNXIuIiIiIiKid5V59TxNO378OAICAjBixAh07NgRp0+fxqxZs2BkZISePXtqJSYiyiOXZsHGxlzQ+oiIiIh0jdpJU2BgIHx8fNCsWbNCt1+9ehVbtmzBpk2bBAsOAJYvX45evXph9uzZAICOHTvizZs3WLlyJZMmIi0TS4zweIWBYPXVm5oDIFew+oiIiIiEoPZCEIcOHUJcXFyR2yMjIxEZGSlIUPni4uIQGxsLDw8PlXJPT088evSo2HiIiIiIiIiEUGRPU1xcHPr27YucnBxl2YwZMzBjxowiK3NxcRE0uEePHgEA6tWr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\n",
      "text/plain": [
       "<Figure size 1008x7056 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "create_summary_tear_sheet(lr_factor_data);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Ridge Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:33:45.900704Z",
     "start_time": "2020-06-17T19:33:45.885848Z"
    }
   },
   "outputs": [],
   "source": [
    "best_ridge_alpha = get_best_alpha(ridge_scores)\n",
    "ridge_predictions = ridge_predictions[ridge_predictions.alpha==best_ridge_alpha].drop('alpha', axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:33:45.948082Z",
     "start_time": "2020-06-17T19:33:45.904678Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "date                       symbol\n",
       "2014-12-09 00:00:00+00:00  AAL       0.001948\n",
       "                           AAPL     -0.001526\n",
       "                           ABBV      0.001099\n",
       "                           AGN       0.001914\n",
       "                           AIG      -0.000462\n",
       "dtype: float64"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ridge_factor = get_factor(ridge_predictions.predicted.swaplevel())\n",
    "ridge_factor.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:33:48.580227Z",
     "start_time": "2020-06-17T19:33:45.951520Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dropped 0.0% entries from factor data: 0.0% in forward returns computation and 0.0% in binning phase (set max_loss=0 to see potentially suppressed Exceptions).\n",
      "max_loss is 35.0%, not exceeded: OK!\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 74054 entries, (Timestamp('2014-12-09 00:00:00+0000', tz='UTC'), 'AAL') to (Timestamp('2017-11-29 00:00:00+0000', tz='UTC'), 'XOM')\n",
      "Data columns (total 6 columns):\n",
      " #   Column           Non-Null Count  Dtype  \n",
      "---  ------           --------------  -----  \n",
      " 0   1D               74054 non-null  float64\n",
      " 1   5D               74054 non-null  float64\n",
      " 2   10D              74054 non-null  float64\n",
      " 3   21D              74054 non-null  float64\n",
      " 4   factor           74054 non-null  float64\n",
      " 5   factor_quantile  74054 non-null  int64  \n",
      "dtypes: float64(5), int64(1)\n",
      "memory usage: 3.7+ MB\n"
     ]
    }
   ],
   "source": [
    "ridge_factor_data = get_clean_factor_and_forward_returns(factor=ridge_factor,\n",
    "                                                         prices=trade_prices,\n",
    "                                                         quantiles=5,\n",
    "                                                         periods=(1, 5, 10, 21))\n",
    "ridge_factor_data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:34:05.722286Z",
     "start_time": "2020-06-17T19:33:48.584177Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Quantiles Statistics\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>min</th>\n",
       "      <th>max</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>count</th>\n",
       "      <th>count %</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>factor_quantile</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.035996</td>\n",
       "      <td>0.009161</td>\n",
       "      <td>-0.003350</td>\n",
       "      <td>0.003619</td>\n",
       "      <td>14982</td>\n",
       "      <td>20.231183</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.013073</td>\n",
       "      <td>0.011246</td>\n",
       "      <td>-0.001328</td>\n",
       "      <td>0.003059</td>\n",
       "      <td>14877</td>\n",
       "      <td>20.089394</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.010553</td>\n",
       "      <td>0.012706</td>\n",
       "      <td>-0.000268</td>\n",
       "      <td>0.003090</td>\n",
       "      <td>14336</td>\n",
       "      <td>19.358846</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.009280</td>\n",
       "      <td>0.015166</td>\n",
       "      <td>0.000742</td>\n",
       "      <td>0.003224</td>\n",
       "      <td>14877</td>\n",
       "      <td>20.089394</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>-0.007696</td>\n",
       "      <td>0.038573</td>\n",
       "      <td>0.002683</td>\n",
       "      <td>0.004058</td>\n",
       "      <td>14982</td>\n",
       "      <td>20.231183</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                      min       max      mean       std  count    count %\n",
       "factor_quantile                                                          \n",
       "1               -0.035996  0.009161 -0.003350  0.003619  14982  20.231183\n",
       "2               -0.013073  0.011246 -0.001328  0.003059  14877  20.089394\n",
       "3               -0.010553  0.012706 -0.000268  0.003090  14336  19.358846\n",
       "4               -0.009280  0.015166  0.000742  0.003224  14877  20.089394\n",
       "5               -0.007696  0.038573  0.002683  0.004058  14982  20.231183"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Returns Analysis\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>1D</th>\n",
       "      <th>5D</th>\n",
       "      <th>10D</th>\n",
       "      <th>21D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Ann. alpha</th>\n",
       "      <td>0.033</td>\n",
       "      <td>0.023</td>\n",
       "      <td>0.013</td>\n",
       "      <td>0.009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>beta</th>\n",
       "      <td>-0.010</td>\n",
       "      <td>-0.082</td>\n",
       "      <td>-0.059</td>\n",
       "      <td>0.022</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mean Period Wise Return Top Quantile (bps)</th>\n",
       "      <td>1.391</td>\n",
       "      <td>0.474</td>\n",
       "      <td>-0.177</td>\n",
       "      <td>0.101</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mean Period Wise Return Bottom Quantile (bps)</th>\n",
       "      <td>-2.657</td>\n",
       "      <td>-1.361</td>\n",
       "      <td>-0.954</td>\n",
       "      <td>-1.062</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mean Period Wise Spread (bps)</th>\n",
       "      <td>4.048</td>\n",
       "      <td>1.861</td>\n",
       "      <td>0.795</td>\n",
       "      <td>1.151</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                  1D     5D    10D    21D\n",
       "Ann. alpha                                     0.033  0.023  0.013  0.009\n",
       "beta                                          -0.010 -0.082 -0.059  0.022\n",
       "Mean Period Wise Return Top Quantile (bps)     1.391  0.474 -0.177  0.101\n",
       "Mean Period Wise Return Bottom Quantile (bps) -2.657 -1.361 -0.954 -1.062\n",
       "Mean Period Wise Spread (bps)                  4.048  1.861  0.795  1.151"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Information Analysis\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>1D</th>\n",
       "      <th>5D</th>\n",
       "      <th>10D</th>\n",
       "      <th>21D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>IC Mean</th>\n",
       "      <td>0.020</td>\n",
       "      <td>0.015</td>\n",
       "      <td>0.014</td>\n",
       "      <td>0.015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>IC Std.</th>\n",
       "      <td>0.181</td>\n",
       "      <td>0.170</td>\n",
       "      <td>0.171</td>\n",
       "      <td>0.158</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Risk-Adjusted IC</th>\n",
       "      <td>0.113</td>\n",
       "      <td>0.088</td>\n",
       "      <td>0.081</td>\n",
       "      <td>0.096</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t-stat(IC)</th>\n",
       "      <td>3.085</td>\n",
       "      <td>2.418</td>\n",
       "      <td>2.224</td>\n",
       "      <td>2.634</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>p-value(IC)</th>\n",
       "      <td>0.002</td>\n",
       "      <td>0.016</td>\n",
       "      <td>0.026</td>\n",
       "      <td>0.009</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>IC Skew</th>\n",
       "      <td>0.008</td>\n",
       "      <td>-0.022</td>\n",
       "      <td>-0.062</td>\n",
       "      <td>-0.063</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>IC Kurtosis</th>\n",
       "      <td>-0.138</td>\n",
       "      <td>-0.172</td>\n",
       "      <td>-0.126</td>\n",
       "      <td>-0.268</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     1D     5D    10D    21D\n",
       "IC Mean           0.020  0.015  0.014  0.015\n",
       "IC Std.           0.181  0.170  0.171  0.158\n",
       "Risk-Adjusted IC  0.113  0.088  0.081  0.096\n",
       "t-stat(IC)        3.085  2.418  2.224  2.634\n",
       "p-value(IC)       0.002  0.016  0.026  0.009\n",
       "IC Skew           0.008 -0.022 -0.062 -0.063\n",
       "IC Kurtosis      -0.138 -0.172 -0.126 -0.268"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Turnover Analysis\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>1D</th>\n",
       "      <th>5D</th>\n",
       "      <th>10D</th>\n",
       "      <th>21D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Quantile 1 Mean Turnover</th>\n",
       "      <td>0.294</td>\n",
       "      <td>0.513</td>\n",
       "      <td>0.617</td>\n",
       "      <td>0.723</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Quantile 2 Mean Turnover</th>\n",
       "      <td>0.507</td>\n",
       "      <td>0.699</td>\n",
       "      <td>0.756</td>\n",
       "      <td>0.788</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Quantile 3 Mean Turnover</th>\n",
       "      <td>0.563</td>\n",
       "      <td>0.734</td>\n",
       "      <td>0.777</td>\n",
       "      <td>0.805</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Quantile 4 Mean Turnover</th>\n",
       "      <td>0.511</td>\n",
       "      <td>0.698</td>\n",
       "      <td>0.751</td>\n",
       "      <td>0.785</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Quantile 5 Mean Turnover</th>\n",
       "      <td>0.300</td>\n",
       "      <td>0.529</td>\n",
       "      <td>0.640</td>\n",
       "      <td>0.743</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                              1D     5D    10D    21D\n",
       "Quantile 1 Mean Turnover   0.294  0.513  0.617  0.723\n",
       "Quantile 2 Mean Turnover   0.507  0.699  0.756  0.788\n",
       "Quantile 3 Mean Turnover   0.563  0.734  0.777  0.805\n",
       "Quantile 4 Mean Turnover   0.511  0.698  0.751  0.785\n",
       "Quantile 5 Mean Turnover   0.300  0.529  0.640  0.743"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>1D</th>\n",
       "      <th>5D</th>\n",
       "      <th>10D</th>\n",
       "      <th>21D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Mean Factor Rank Autocorrelation</th>\n",
       "      <td>0.822</td>\n",
       "      <td>0.56</td>\n",
       "      <td>0.401</td>\n",
       "      <td>0.247</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                     1D    5D    10D    21D\n",
       "Mean Factor Rank Autocorrelation  0.822  0.56  0.401  0.247"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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h6RYLIa1tbkgdVHFxTZCZYntjT5EyDbC9kZljW1OOCKlUqnUdhDFERISgtmzZ+PXX3+Fq6vrB/ePj0+BQlHwpcbGPoWNTW0hQ6wQJBIxZDKFIHXxNaYPsbY2x+vXydoOgyoJtreKx9raHOIA4R5JogjuI1gbYXujssY2V3RisajAjhadn9OUlJSEkJAQvHz5Uq38k08+AYA85URERERERELS+aRJoVBgzpw52Lt3r1r55cuXAQD169fXRlhERERERFRJ6PycJqlUCj8/P2zYsAFGRkZwcXHB9evXsX79egwZMgR169bVdohERERERHvuIzAAACAASURBVFSB6XzSBACBgYGoWbMmDhw4gB9//BE2NjaYOnUqPvvsM22HRkREREREFVy5SJr09fUxduxYjB07VtuhEBERERFRJaPzc5qIiIiIiIi0iUkTERERERFRIZg0ERERERERFYJJExERERERUSGYNBERERERERWiXKyep02WFnqQGJhoNQZZVhoS38iLd6xMhm7dPkVWVqZaubGxMU6evIjFi7/F8eNHVeUikQhGRkawtbWDp2dP+Pr6gbk1EREREVVmTJo+QGJggscrDbQaQ51pWQCSi3VsVNRTZGVl4uuvv4WdXW1VuZ7eP4lQ9eo1sGDBUgCAUqlAcnIyrl69gnXrfkRkZAQWLlwGsZiJExERERFVTkyaKri//34IsViMTp08YGRklO8++vr6cHZ2UStr06YdHBwcEBy8FCdOHEf37r3KIlwiIiIiIp3D7oMK7u+/H+Cjj2oVmDAVpl+/QahRwwahoYdKITIiIiIiovKBSVMF9/ffD2FgoI8ZM6aia9f26N69E5YvX4y0tNQPHisSieDm1gJ370ZCJpOVQbRERERERLqHw/MquL//fojU1BT06TMA/v6jcP/+XWzZshFRUU/x44/rP3i8VCqFTCbD27dvIJValUHERERERES6hUlTBfevfwWhShULODp+DABo2rQZpFIrLFjwDa5dC9dydEREREREuo9JUwXn6uqWp6x163YAgIcPH37w+NevX8HAwABVqlgIHhsRERERUXnAOU0VWGJiAo4cCUFMzDO18szMnGc2Va1atdDj5XI5bt68gUaNXCCRML8mIiIiosqJSVMFJhKJ8d13QTh4cJ9a+ZkzJ6Cnp4fGjZsWevyRIyF49eol+vcfXJphEhER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oZg0ERERERERFaJIc5ouXLiAI0eOIC4uDnK5PM92kUiE7du3CxYcERERERGRtmmcNO3evRuLFi0CAFhZWcHAwKDUgiIiIiIiItIVGidNO3bsQIMGDbBx40ZBlgAvroEDB2LgwIFaOz8REREREVUuGs9pevHiBby9vbWaMBEREREREZU1jZMme3t7xMXFlWYsREREREREOkfj4Xnjxo3D4sWL4enpiXr16pVmTERUTlha6EFiYCJYfQpZhmB1EREREQlF46Tp+vXrMDU1Rb9+/VCnTh1IpVKIRCK1fbh6HlHlIjEwweOVwi0KU2daFoBsweojIiIiEoLGSdPFixcBADY2NkhPT0dMTEypBUVERERERKQrNE6aDhw4AKlUWpqxEBERERER6RyNF4IYOHAgfvrpp9KMhYiIiIiISOdonDQlJCRwuXEiIiIiIqp0NE6a+vTpg7179+LZs2elGQ8REREREZFO0XhOk1gsxqNHj+Dp6Ql7e3tYWVlBLFbPubh6HhERERERVTQaJ02XL1+GpaUlACAzMxPPnz8vtaCIiIiIiIh0hcZJ05kzZ0ozDiIiIiIiIp2k8ZwmIiIiIiKiykjjniZ/f3+N9tuxY0exgyEiIiIiItI1GidN+a2ap1AokJiYiMzMTNja2qJevXqCBkdERERERKRtJZ7TJJfLcfr0acydOxdjxowRLDAiIiIiIiJdoHHSVBA9PT1069YNERERCA4Oxt69e4WIi4iIiIio0lDIMmBtbS5ofSScEidNuRwcHLBr1y6hqiMiIiIiqjTEEiM8XmkgWH11pmUByBasvspOkNXzsrKyEBoaCisrKyGqIyIiIiIi0hklXj0vKysLjx8/xtu3bzF16lTBAiMiIiIiItIFJVo9D8iZ01S3bl307t0bfn5+ggVGRERERESkC0q8eh4REREREVFFpvGcpsDAQERERBS4/cqVKxg7dqwgQREREREREekKjZOmQ4cOITo6usDt4eHhCA8PFyQoIiIiIiIiXVHg8Lzo6Gj07t0bWVlZqrKZM2di5syZBVbm4uIibHRERERERERaVmDSZGdnh3nz5uHatWtQKpUICQmBm5sb7Ozs8uwrFoshlUrh6+tbqsESERERERGVtUIXghg0aBAGDRoEAIiJicGkSZPQunXrMgmMiIiIiIhIF2i8et7OnTtV/61QKJCQkIAqVarA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\n",
      "text/plain": [
       "<Figure size 1008x7056 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "create_summary_tear_sheet(ridge_factor_data);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Lasso Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:34:05.734737Z",
     "start_time": "2020-06-17T19:34:05.723573Z"
    }
   },
   "outputs": [],
   "source": [
    "best_lasso_alpha = get_best_alpha(lasso_scores)\n",
    "lasso_predictions = lasso_predictions[lasso_predictions.alpha==best_lasso_alpha].drop('alpha', axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:34:05.803106Z",
     "start_time": "2020-06-17T19:34:05.736100Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "date                       symbol\n",
       "2014-12-09 00:00:00+00:00  AAL       0.001875\n",
       "                           AAPL     -0.001646\n",
       "                           ABBV      0.001164\n",
       "                           AGN       0.001919\n",
       "                           AIG      -0.000529\n",
       "dtype: float64"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lasso_factor = get_factor(lasso_predictions.predicted.swaplevel())\n",
    "lasso_factor.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:34:08.719997Z",
     "start_time": "2020-06-17T19:34:05.805777Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dropped 0.0% entries from factor data: 0.0% in forward returns computation and 0.0% in binning phase (set max_loss=0 to see potentially suppressed Exceptions).\n",
      "max_loss is 35.0%, not exceeded: OK!\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 74054 entries, (Timestamp('2014-12-09 00:00:00+0000', tz='UTC'), 'AAL') to (Timestamp('2017-11-29 00:00:00+0000', tz='UTC'), 'XOM')\n",
      "Data columns (total 6 columns):\n",
      " #   Column           Non-Null Count  Dtype  \n",
      "---  ------           --------------  -----  \n",
      " 0   1D               74054 non-null  float64\n",
      " 1   5D               74054 non-null  float64\n",
      " 2   10D              74054 non-null  float64\n",
      " 3   21D              74054 non-null  float64\n",
      " 4   factor           74054 non-null  float64\n",
      " 5   factor_quantile  74054 non-null  int64  \n",
      "dtypes: float64(5), int64(1)\n",
      "memory usage: 3.7+ MB\n"
     ]
    }
   ],
   "source": [
    "lasso_factor_data = get_clean_factor_and_forward_returns(factor=lasso_factor,\n",
    "                                                      prices=trade_prices,\n",
    "                                                      quantiles=5,\n",
    "                                                      periods=(1, 5, 10, 21))\n",
    "lasso_factor_data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-17T19:34:24.592868Z",
     "start_time": "2020-06-17T19:34:08.721255Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Quantiles Statistics\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>min</th>\n",
       "      <th>max</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>count</th>\n",
       "      <th>count %</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>factor_quantile</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.044249</td>\n",
       "      <td>0.009401</td>\n",
       "      <td>-0.003446</td>\n",
       "      <td>0.003807</td>\n",
       "      <td>14982</td>\n",
       "      <td>20.231183</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.013901</td>\n",
       "      <td>0.011329</td>\n",
       "      <td>-0.001354</td>\n",
       "      <td>0.003222</td>\n",
       "      <td>14877</td>\n",
       "      <td>20.089394</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.012216</td>\n",
       "      <td>0.013095</td>\n",
       "      <td>-0.000262</td>\n",
       "      <td>0.003277</td>\n",
       "      <td>14336</td>\n",
       "      <td>19.358846</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.010771</td>\n",
       "      <td>0.015355</td>\n",
       "      <td>0.000777</td>\n",
       "      <td>0.003429</td>\n",
       "      <td>14877</td>\n",
       "      <td>20.089394</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>-0.008964</td>\n",
       "      <td>0.038336</td>\n",
       "      <td>0.002798</td>\n",
       "      <td>0.004332</td>\n",
       "      <td>14982</td>\n",
       "      <td>20.231183</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                      min       max      mean       std  count    count %\n",
       "factor_quantile                                                          \n",
       "1               -0.044249  0.009401 -0.003446  0.003807  14982  20.231183\n",
       "2               -0.013901  0.011329 -0.001354  0.003222  14877  20.089394\n",
       "3               -0.012216  0.013095 -0.000262  0.003277  14336  19.358846\n",
       "4               -0.010771  0.015355  0.000777  0.003429  14877  20.089394\n",
       "5               -0.008964  0.038336  0.002798  0.004332  14982  20.231183"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Returns Analysis\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>1D</th>\n",
       "      <th>5D</th>\n",
       "      <th>10D</th>\n",
       "      <th>21D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Ann. alpha</th>\n",
       "      <td>0.034</td>\n",
       "      <td>0.022</td>\n",
       "      <td>0.011</td>\n",
       "      <td>0.007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>beta</th>\n",
       "      <td>-0.012</td>\n",
       "      <td>-0.080</td>\n",
       "      <td>-0.056</td>\n",
       "      <td>0.021</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mean Period Wise Return Top Quantile (bps)</th>\n",
       "      <td>1.912</td>\n",
       "      <td>0.684</td>\n",
       "      <td>-0.084</td>\n",
       "      <td>0.199</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mean Period Wise Return Bottom Quantile (bps)</th>\n",
       "      <td>-2.733</td>\n",
       "      <td>-0.906</td>\n",
       "      <td>-0.729</td>\n",
       "      <td>-0.904</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mean Period Wise Spread (bps)</th>\n",
       "      <td>4.645</td>\n",
       "      <td>1.618</td>\n",
       "      <td>0.659</td>\n",
       "      <td>1.090</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                  1D     5D    10D    21D\n",
       "Ann. alpha                                     0.034  0.022  0.011  0.007\n",
       "beta                                          -0.012 -0.080 -0.056  0.021\n",
       "Mean Period Wise Return Top Quantile (bps)     1.912  0.684 -0.084  0.199\n",
       "Mean Period Wise Return Bottom Quantile (bps) -2.733 -0.906 -0.729 -0.904\n",
       "Mean Period Wise Spread (bps)                  4.645  1.618  0.659  1.090"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Information Analysis\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>1D</th>\n",
       "      <th>5D</th>\n",
       "      <th>10D</th>\n",
       "      <th>21D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>IC Mean</th>\n",
       "      <td>0.021</td>\n",
       "      <td>0.015</td>\n",
       "      <td>0.013</td>\n",
       "      <td>0.016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>IC Std.</th>\n",
       "      <td>0.182</td>\n",
       "      <td>0.169</td>\n",
       "      <td>0.171</td>\n",
       "      <td>0.157</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Risk-Adjusted IC</th>\n",
       "      <td>0.113</td>\n",
       "      <td>0.086</td>\n",
       "      <td>0.077</td>\n",
       "      <td>0.100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t-stat(IC)</th>\n",
       "      <td>3.092</td>\n",
       "      <td>2.351</td>\n",
       "      <td>2.106</td>\n",
       "      <td>2.739</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>p-value(IC)</th>\n",
       "      <td>0.002</td>\n",
       "      <td>0.019</td>\n",
       "      <td>0.036</td>\n",
       "      <td>0.006</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>IC Skew</th>\n",
       "      <td>0.011</td>\n",
       "      <td>-0.017</td>\n",
       "      <td>-0.052</td>\n",
       "      <td>-0.057</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>IC Kurtosis</th>\n",
       "      <td>-0.152</td>\n",
       "      <td>-0.187</td>\n",
       "      <td>-0.150</td>\n",
       "      <td>-0.300</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     1D     5D    10D    21D\n",
       "IC Mean           0.021  0.015  0.013  0.016\n",
       "IC Std.           0.182  0.169  0.171  0.157\n",
       "Risk-Adjusted IC  0.113  0.086  0.077  0.100\n",
       "t-stat(IC)        3.092  2.351  2.106  2.739\n",
       "p-value(IC)       0.002  0.019  0.036  0.006\n",
       "IC Skew           0.011 -0.017 -0.052 -0.057\n",
       "IC Kurtosis      -0.152 -0.187 -0.150 -0.300"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Turnover Analysis\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>1D</th>\n",
       "      <th>5D</th>\n",
       "      <th>10D</th>\n",
       "      <th>21D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Quantile 1 Mean Turnover</th>\n",
       "      <td>0.296</td>\n",
       "      <td>0.519</td>\n",
       "      <td>0.619</td>\n",
       "      <td>0.727</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Quantile 2 Mean Turnover</th>\n",
       "      <td>0.512</td>\n",
       "      <td>0.703</td>\n",
       "      <td>0.757</td>\n",
       "      <td>0.791</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Quantile 3 Mean Turnover</th>\n",
       "      <td>0.566</td>\n",
       "      <td>0.734</td>\n",
       "      <td>0.781</td>\n",
       "      <td>0.806</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Quantile 4 Mean Turnover</th>\n",
       "      <td>0.509</td>\n",
       "      <td>0.698</td>\n",
       "      <td>0.753</td>\n",
       "      <td>0.783</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Quantile 5 Mean Turnover</th>\n",
       "      <td>0.301</td>\n",
       "      <td>0.534</td>\n",
       "      <td>0.643</td>\n",
       "      <td>0.745</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                              1D     5D    10D    21D\n",
       "Quantile 1 Mean Turnover   0.296  0.519  0.619  0.727\n",
       "Quantile 2 Mean Turnover   0.512  0.703  0.757  0.791\n",
       "Quantile 3 Mean Turnover   0.566  0.734  0.781  0.806\n",
       "Quantile 4 Mean Turnover   0.509  0.698  0.753  0.783\n",
       "Quantile 5 Mean Turnover   0.301  0.534  0.643  0.745"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>1D</th>\n",
       "      <th>5D</th>\n",
       "      <th>10D</th>\n",
       "      <th>21D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Mean Factor Rank Autocorrelation</th>\n",
       "      <td>0.82</td>\n",
       "      <td>0.548</td>\n",
       "      <td>0.392</td>\n",
       "      <td>0.239</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                    1D     5D    10D    21D\n",
       "Mean Factor Rank Autocorrelation  0.82  0.548  0.392  0.239"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 432x288 with 0 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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8ODh2g6FiIiIiEhr2H1AyM7ORlTUbQA5m9u+e/cOV69eQUhIMHr2dEX37j21HCERERERkfYwafqItEwZFAEDtB5DSXr5Mh7e3uNUj01MTFGvXj3Mm7cQ/fr1h0JRorcnIiIiItJpTJo+IvVdOlK1HYRA+vYdgL591RPAb7/9Dt9++12B14jFYiiYNRERERFRBcY5TURERERERIVg0kRERERERFQIJk1ERERERESFYNJERERERERUCCZNREREREREhWDSREREREREVAgmTURERERERIVg0kRERERERFQIJk1ERERERESFYNJERERERO/tYuoAACAASURBVERUCIm2A9B1FuZ6kBiYaDUGWVYaEt/Ki3etTIZevTojKytTrdzY2BgnT17AsmXf4fjxo6pykUgEIyMj2NrawdW1Lzw9vcDcmoiIiIgqMiZNHyExMMHj1QZajaHOzCwAycW6Njr6KbKyMvHtt9/Bzq62qlxP73+JULVq1bFkyXIAgFKpQHJyMq5cuYyNG9chKioSfn4rIBYzcSIiIiKiiolJUzn3998PIRaL0bVrDxgZGeV7jr6+PhwcHNXK2rXrAHt7ewQELMeJE8fRu3e/0giXiIiIiEjnsPugnPv77weoUaNmgQlTYQYNGobq1a0RFnaoBCIjIiIiIiobmDSVc3///RAGBvqYNWsGevbsiN69u2LlymVIS0v96LUikQjOzq1w924UZDJZKURLRERERKR7ODyvnPv774dITU3BgAFDMHr0ONy/fxfbt29BdPRTrFu36aPXS6VSyGQyvHv3FlKpZSlETERERESkW5g0lXP//Kc/Klc2R716nwEAmjdvAanUEkuWLMTVqxFajo6IiIiISPfpfNKkUCiwf/9+7N27F7GxsbC0tET37t0xY8YMmJmZaTs8nefk5JynrG3bDgCAhw8ffvT6V69ewsDAAJUrmwseGxERERFRWaDzSdPWrVuxevVqTJgwAW3btsXjx4+xdu1a/P3339i2bZu2w9NpiYlvcPHiebRo0RK2tjVV5ZmZOXs2ValSpdDr5XI5bty4jiZNHCGR6HxTISIiIiIqETq9EIRSqcTWrVvh7u6Ob775Bu3atcOIESOwePFiXLx4Effu3dN2iDpNJBLjX//yR0hIsFr5mTMnoKenh6ZNmxd6/ZEjoXj5Mh6DBw8vyTCJiIiIiHSaTncfpKamYuDAgejTp49aed26dQEA0dHRaNy4sTZCKxOqVKmCoUO/wMGD+2FiYopmzZxw+3Ykdu3ajqFD3VCzph0AIDs7G1FRtwHkbG777t07XL16BSEhwejZ0xXdu/fU5tMgIiIiItIqnU6azMzMsGDBgjzlp06dAgB89tlnpR1SmTN9+tewsqqG334LQ1BQIKpWtcL48ZMxYsRo1TkvX8bD23uc6rGJiSnq1auHefMWol+//lAotBE5EREREZFuECmVSqW2gyiKyMhIjBo1Ch07dsSGDRsEq/fOnbuoUaN2nvLKpmLoGRgLdp/ikGel411q2c9cnj17iiZNPtd2GEREVI6JfY4IVpciYIBgdRFR2abTPU0funbtGry9vVGzZk0sXbq0SNcmJKRAoSg4P1QoFJDJ8iYmb94qACQXNdRyQyIR5/u6FIdCocCrVxX3taSPs7KqxDZCpYbtrfyxsqokeJ1CtRG2NyptbHNFJxaLYGmZ/+rcOr0QxPuOHTuGcePGwcbGBjt37oSFhYW2QyIiIiIiogqgTCRNO3bswKxZs9C8eXMEBQWhWrVq2g6JiIiIiIgqCJ1Pmg4cOIDly5ejT58+2Lp1KypVEr7rnYiIiIiIqCA6PacpISEBy5Ytg62tLUaMGIG7d++qHa9VqxakUqmWoiMiIiKiisq0sjFMDIX7Kp2WKUPqu3TB6iNh6XTSdOHCBaSnpyMuLg4jRozIc3zlypUYNGiQFiIjIiIioorMxFAi+GqNqYLVRkLT6aRp8ODBGDx4sLbDICIiIiKiCkzn5zQRERERERFpE5MmIiIiIiKiQjBpIiIiIiIiKoROz2nSBabmhjAxMNBqDGlZWUh9m6nVGIiIiIiIKiomTR9hYmAAvR0+Wo1BPi4Aqfj0pOnhwwf48svROHAgDNWqVVeVX7lyGZs3/4THj/8DqdQSQ4e6wdNzpOr4tm2bsGPHFrW6DA0NYW1tg65de2DEiDEwNjb+5PiIiIiIiHQRk6YKIjr6CebM+RpyuVyt/PbtSMyZMxPdu/fEl19649atm/jppzVQKpXw8hqlOk9PTw8bNmz97yMlUlNTcft2JPbt242//orA2rU/w9DQqBSfERERERFR6WDSVM7JZDKEhR3Cxo3rIZHkfbu3bt2EBg0aYeFCPwBAmzbtIJPJsGvXdgwf7g6J5H+JkIODo9q1Li5t0aSJI+bMmYl9+/Zg7NgvS/bJEBERERFpAReCKOdu3bqJn39eCw+PEZgyZYbasczMTERGXkeXLt3Uyrt27Y6UlGRERd36aP1t27aHg0NThIUdEjRuIiIiIiJdwaSpnLO3r4Pg4MMYP34S9PT01I49exYHmUyGWrVqq5Xb2toByBnSp4mWLVvj5ct4vHjxXJCYiYiIiIh0CZOmck4qtYSFhTTfY6mpKQAAExNTtXITE5P/Hk/V+B4AkJCQUNwwiYiIiIh0FpOmCkypVAIARCJRvsdFIjYPIiIiIiJ+K67ATE3NAOTtUUpLy3lsZmamUT2vXr0EAFhZWQkYHRERERGRbmDSVIHZ2taEnp4e4uJi1MpjY3MefzjXqSDXr1+FjU0Ntb2fiIiIiIjKCyZNFZihoSGaNXPCH3+cVQ3VA4Bz587AzMwMjRp9/tE6IiL+RFTULQwePKwkQyUiIiIi0hru01TBjRkzATNnTsXixfPRp09/REXdwr59u+HtPR1GRuqb1UZF3f7v/ymRkpKC27cjsX9/EJo3bwE3N6/SD56IiIiIqBQwafqItKwsyMcFaD2GkuLs3ApLl67E9u2bMH++D6pWrYapU7+Cp+dItfPkcjm8vcepHhsZGaFWrdrw9p6OgQOHQl9fv8RiJCIiIiLSJiZNH5H6NhOpyNR2GILo23cA+vYdkKe8c+eu6Ny5a4HXTZgwGRMmTC7J0IiIiIiIdFaRkqasrCzcvHkTsbGxSExMhJ6eHiwtLWFjY4PmzZtDImEORkRERERE5YtGWc7Zs2exZ88eXLlyBTKZTG3RACBnnx9jY2O0adMGbm5u6NKlS0nESkREREREVOoKTZrOnz+PZcuW4enTp2jQoAHGjx+Phg0bws7ODmZmZlAoFEhKSkJ8fDxu3ryJa9euwdvbG3Xr1sWsWbPQo0eP0noeREREREREJaLApOkf//gH/vrrL4wePRoDBgxAzZo1C62ob9++AICnT5/i0KFD+PbbbxEaGor169cLGzEREREREVEpKnCfpsaNG+P06dOYMmXKRxOm99WuXRszZ87E6dOn0ahRI0GCJCIiIiIi0pYCe5qmTJnySRWbmZlh+vTpn1QHERERUXmQIcuGlVUlwepLy8pC6tvysbovUVnwScvdZWdn49KlSxCLxWjXrh1XzyMiIiLKh5FEH3o7fASrTz4uoNxsiUJUFmic5WRlZWHp0qWIjY3F9u3bkZWVBXd3d9y/fx8AUK9ePQQGBsLS0rLEgiUiIiIiIiptBc5p+tD69esRHBwMGxsbAEBoaCju3buHUaNGwd/fH69evcKaNWtKLFAiIiIiIiJt0Lin6fjx4xg+fDiWLl0KAPj9999RqVIlzJkzBxKJBDExMThw4ECJBUpERERERKQNGidNL168QPPmzQEA6enp+Ouvv9ClSxfVPCYbGxu8e/euZKLUIotKepAYmWg1BllGGhKT5cW6VqFQICwsBIcOHcSzZ3GwsJCiY8fOmDBhMkxMTNXOffXqJUaNcsOKFavRrFlzVfm2bZuwY8cWtXMNDQ1hbW2Drl17YMSIMTA2Ni5WfEREREREuk7jpKlq1ap4/fo1AODChQvIyspCly5dVMcfPHiAatWqCR6gtkmMTHB3jEirMXweqASSk4t1bVDQLmzd+jM8PUfB2bkVYmKisXXrRjx+/BirVq1Tnff69Wt8880MpKSk5FuPnp4eNmzY+t9HSqSmpuL27Ujs27cbf/0VgbVrf4ahoVGxYiQiIiIi0mUaJ00uLi4IDAyEoaEhgoKCYGxsjB49euDdu3f49ddfERwcDA8Pj5KMlYpIqVRi795dGDhwKLy9c5Z/b9XKBebm5li8eD4ePnyAzz5rgDNnTmLt2h+QnS0rtD4HB0e1xy4ubdGkiSPmzJmJffv2YOzYL0vsuRAREdH/KLIyBFvC/FNGtBBVFBonTfPnz0d8fDxWrFgBExMT+Pn5oXLlyrh27RpWrFiBVq1acV8mHZOWlgpX1z7o1q2nWnmtWvYAgLi4WJiZVYKf3yIMHjwMrVu3xZw5M4t0j7Zt28PBoSnCwg4xaSIiIiolYgMjwUbCfMqIFqKKQuOkqXLlytixYwfevHkDMzMzGBgYAAAaN26M/fv3o1mzZiUWJBWPqakZZs6cnaf8woVzAIA6derB3LwK9u0LgY1NDVy/frVY92nZsjV27NiCFy+ew9ra5lNCJiIiIiLSOUXejVYqleLNmzd49uwZ9PT0ULNmTSZMZcidO1HYsycQHTt2Qe3a9gAAE5NPW+hCKs3ZmyshIYFJExERERGVO0VKmq5evYqAgADcunULSqUSQM4CAW3atMGcOXPQoEGDEgmShHHr1k3MmfM1atSogXnzFmg7HCIiIiKiMkHjpCkiIgITJkyAiYkJvLy8YG9vD7lcjidPnuDIkSPw9PTEvn37mDjpqNOnT2DZsn/Czq4WfvhhHczNqwhW96tXLwEAVlZWgtVJRERERKQrNE6aVq9eDVtbW+zbtw9SqVTt2LRp0+Dm5oZVq1Zh48aNggdJn+aXX/Zgw4Y1cHJyhr9/AMzMzASt//r1q7CxqYFq1aoLWi8RERERkS4Qa3ri/fv34enpmSdhAnL2cPLy8sJff/0laHD5uXfvHpo0aYIXL16U+L3Kg6NHQ7F+/Wp069YDP/ywTvCEKSLiT0RF3cLgwcMErZeIiIiISFdo3NNkaWmJhISEAo9nZmYK/oX8Q48ePcLkyZMhkxW+nxDlSEx8g9WrA2BtbYOhQ93x4MF9teM1a9qhShXNh+lFRd3+7/8pkZKSgtu3I7F/fxCaN28BNzcvASMnIiIiItIdGidN3t7e8PPzg5OTE7p166Z2LDIyErt27cI333wjeIAAIJPJsH//fvzwww/Q19cvkXsUeO+MtJz9C7RIlpFWrOsuXw5HRkYGXrx4jmnT8u6htHDhEri69tWoLrlcDm/vcarHRkZGqFWrNry9p2PgwKGl/r4QEREREZUWjZOmmzdvwtLSEtOmTUPdunVRr1496OvrIyYmBrdv34aBgQGOHj2Ko0ePqq4RiUQIDAz85CCvXbuGgIAATJgwAdWrV8eCBaW38ltisrzMbvjWp09/9OnTX+PzW7RoiYsX8+7VNGHCZEyYMFnI0IiIiIiIygyNk6bw8HAAgI2NDdLT0xEVFaU6ZmOTszdPbGyswOHlqFevHk6dOgVLS0uEhISUyD2IiIiIiIjyo3HSdObMmZKMo1BVq1bV2r2JiIiIiKhiK9LmtrkSEhIQFxcHsVgMOzs7mJubCx2X4CwtC1+k4uVLMSQSjRcTrFCEel3EYjGsrCoJUheVX2wjVJrY3uhjKkobqSjPU9cJ/T7wfRVOkZKmP//8EwEBAbh7965aecuWLTF//nw0btxY0OCElJCQAoWi4AUdFAoFZDJFKUZUNkgkYsFeF4VCgVevyub8MCodVlaV2Eao1LC9lT8l8QVRqDai619e+bdQdLrc3gB+xhWHWCwqsKNF46Tp4sWLmDx5MszMzDBy5EjUqlULCoUCT548wZEjR+Dl5YU9e/agSZMmggVe2pRKJUQikbbDKJeUSu2uQEhEREREVFwaJ01r165FrVq18Msvv+QZjjdt2jS4u7tj5cqVgqyWpw1isR4UCjn09Io1YpE+QqGQQyzW03YYREREGlPIMnS+h4iISofGGcL9+/cxa9asfOcvVa1aFV5eXli3bp2gwZUmicQAmZnpMDHhh2NJyMhIh76+gbbDICIi0phYYoTHq4X5t6vOzCxB6iEi7dB4hn+1atWQmJhY4HG5XI4qVaoIEpQ2VKpUBSkpb5GVlcGhZAJSKpXIyspAaupbmJmV3fZBRERERBWXxj1N3t7eWLZsGVq2bImOHTuqHbt37x4CAwPh7e0teIAfGjp0KIYOHSp4vfr6BqhUyQLv3r2BTJYteP1llVgshkLxaQtBSCT6qFTJgj1NRERERFQmFZg0jR49Ot/ySZMm4bPPPkPdunUhEokQFxeHO3fuwNzcXG3D27LI2NgUxsam2g5Dp3DlFSIiIiKq6ApMmmJjY/OUWVhYAABSU1Nx+/ZtVbm1tTUA4OrVq0LHR0REREREpFUFJk1nzpwpzTiIiIiIiIh0UoELQcTFxX1y5TExMZ9cBxERERERkTYVmDQNGzYMS5cuRXx8fJErjYmJwcKFCzF8+PBPCo6IiIiIiEjbCkyaDh8+jJcvX6J79+4YO3YsgoKCCuw5UiqVePDgAYKCgjBixAj06tULCQkJOHz4cIkFTkREREREVBoKnNNUvXp1rF27Fn/99Rd27twJf39/LF26FMbGxrC1tYWZmRmUSiUSExPx8uVLZGRkQCQSoVu3bggKCkKLFi1K83kQERERERGViI/u09SqVSu0atUKL168wPnz53H9+nXExMQgKSkJYrEYNjY2cHZ2Rps2bdChQwdIpdLSiJuIiIiIiKhUaLy5rbW1Ndzc3ODm5laS8RARERERVTgKWQasrCoJWh8JR+OkiYiIiIiISoZYYoTHqw0Eq6/OzCwA2YLVV9EVuBAEERERERERMWkiIiIiIiIqFJMmIiIiIiKiQjBpIiIiIiIiKgSTJiIiIiIiokIUafW88+fP48iRI3j9+jXkcnme4yKRCIGBgYIFR0REREREpG0aJ01BQUFYunQpAMDS0hIGBsItiUhERERERKSrNE6adu3ahUaNGmHLli2oWrVqScZERERERESkMzSe0/T8+XO4u7szYSIiIiIiogpF46SpVq1aeP36dUnGQkREREREpHM0TpomTZqE3bt34+HDhyUZDxERERERkU7ReE7TtWvXYGpqikGDBqFOnTqQSqUQiURq53D1PCIiIiIiKm80TpouXLgAALC2tkZ6ejri4uJKLCgiIiIiIiJdoXHSdPDgQUil0pKMhYiIiIiISOdoPKdp6NCh+Omnn0oyFiIiIiIiIp2jcdL05s0bLjdOREREREQVjsbD8wYMGID9+/ejXbt2qFmzZknGRERlhIW5HiQGJoLVp5BlCFYXERERkVA0TprEYjEePXoEV1dX1KpVC5aWlhCL1TuquHoeUcUiMTDB49UGgtVXZ2YWgGzB6iMiIiISgsZJ06VLl2BhYQEAyMzMxLNnz0osKCIiIiIiIl2hcdJ05syZkoyDiIiIiIhIJ2m8EAQREREREVFFpHFP0+jRozU6b9euXcUOhoiIiIiISNdonDTFxsbmKVMoFEhMTERmZiZsbW1Rv359QYMjIiIiIiLtsqikB4mRcKvlyjLSkJgsF6y+0vDJc5rkcjlOnz6NBQsWYMKECYIFRkRERERE2icxMsHdMSLB6vs8UAkkJwtWX2n45DlNenp66NWrF7744gsEBAQIERMREREREZHOEGwhCHt7e9y/f1+o6oiIiIiIiHSCIElTVlYWwsLCYGlpKUR1eRw9ehT9+vVD06ZN0adPH4SGhpbIfYiIiIiIiD70yavnZWVl4fHjx3j37h1mzJghWGC5jh8/Dh8fH4wePRodO3bEqVOnMHfuXBgZGaF3796C34+IiIiIiOh9n7R6HpAzp6lu3bro378/vLy8BAss16pVq9CnTx/Mnz8fANCxY0e8ffsWa9asYdJEREREREQl7pNXzytJMTExiI6OxqxZs9TKXV1dcfz4ccTExMDOzq7U4yIiIiIioopD4zlNvr6+iIyMLPD45cuXMXHiREGCyvXo0SMAQJ06ddTKa9euDQB4/PixoPcjIiIiIiL6kMZJ06FDhxATE1Pg8YiICERERAgSVK7k/67fbmZmplZuamoKAEhJSRH0fkRERERERB8SKZVKZX4HYmJi0L9/f2RlZQEAlEolRKLCN7VydHREcHCwYMEdOXIEPj4+OHPmDGxtbVXlT548gaura7mZ15SRLYeRvp4gdSlk6RBLjAWpCwDSZVkwlhgIUpc8Kx16BsLFpsjKgNjASLD6Kgq2t+JheyseIdsbIGybE7K9AcK2Oba34mF7Kx62t+LR5fYG8N9UoRU4p8nOzg6LFi3C1atXoVQqERoaCmdn53znEInFYkilUnh6egoaXKVKlQDk7VFKTU1VO66JhIQUKBT55odaZ2VVCWKfI4LUpQgYgMerhftQrjMzC3o7fASpSz4uQPDdpF+9Klu7SesCodubkO+BlVUltrdyRsj2Bgj7GSfk5xsgbJtjeys+4V81YWq0sqpUAu+pkPVlC1hXxaGr7Q0Q/t9U4duv7rU5sVgES0uzfI8VuhDEsGHDMGzYMABAXFwcpk6dirZt2wofYQFy5zJFR0ejYcOGqvKnT5+qHSciIiIiIiopGq+et3v3btX/KxQKvHnzBpUrV4aBgXC9Gh+qXbs2atasiX//+9/o2bOnqvzEiROwt7dHjRo1SuzeRFT6MmTZkI8L0HYYRERERGo0TpqAnB6egIAAXLx4EZmZmdi2bRuAnL2U5s6di5YtWwoe4LRp0+Dr6wtzc3N06dIFZ86cwfHjx/Hjjz8Kfi8i0i4jib5g3f9WVpoP3yUiIipvhPwhMu2/axxUZBonTU+ePIGbmxtEIhE6duyIkydPAsjZ3PbRo0cYP348du3ahebNmwsa4NChQ5GVlYXt27fjwIEDsLOzw4oVK9C3b19B70NEREREVF4I+UMkFSFpWrVqFYyMjHDo0CGIRCKcOHECANC6dWscO3YMnp6eWL9+PbZu3Sp4kB4eHvDw8BC8XqKKKC1TBkXAAMHqIiIiIirvNE6aLl++jHHjxsHS0hKJiYlqx6pXrw4vL68SSZiISFip79KRqu0giIiIiMoQjTe3zcrKQuXKlQs8rq+vj8zMTEGCIiIiIiIi0hUaJ02NGjXCmTNn8j0mk8kQFhamtiw4ERERERFReaBx0jR58mSEh4fDx8cHly9fBpCzd9Pp06cxevRo3L17F+PGjSuxQImIiIiIiLRB4zlNXbt2xbJly+Dv74/ffvsNALBw4UIolUoYGhpi7ty5cHV1LbFAiYiIdJkiKwOfByoFqUuWkSZIPUREJIwi7dM0dOhQ9OrVC+Hh4YiOjoZCoYCtrS3atWsHCwuLkoqRiIhI54kNjLi8LxFROVWkpAkAzMzM0KtXr3yPHT58GIMGDfrkoIiIiIiIiHRFoUmTTCbDqVOnEBkZCaVSic8//xz9+vWDnp6e2nlxcXFYtGgRwsPDmTQREREREVG5UmDSlJCQgAkTJuDBgwdQKnPGaItEImzZsgV79uyBubk5ACAwMBCrV69Geno6nJ2dSydqIiIiIiKiUlLg6nmrVq3C/fv34eHhgeDgYBw5cgQ+Pj6IjY2Fn58fsrKyMG3aNCxfvhwGBgbw8/NDUFBQacZORERERERU4grsafrzzz/Rq1cvLF68WFVWv359GBkZISAgAN999x1Onz6N7t27Y8mSJbC0tCyVgImIiIiIiEpTgT1NCQkJaNu2bZ7yTp06IT09HYcPH8aCBQuwYcMGJkxERERERFRuFdjTlJmZCTMzszzluWVeXl4YOXJkyUVGRPQJZBlpgu2Zk1sfERERVUxFXnI8V6dOnYSMg4hIUInJciCZe+YQERHRpytweN7HSCTFzreIiIiIiIjKjEIzn6SkJDx79kyt7O3btwCAN2/e5DkGADVq1BAwPCIiIiIiIu0qNGny9/eHv79/vsd8fHzylIlEIty9e1eYyIiIiIiIiHRAgUnTkCFDSjMOIiIiIiIinVRg0vT999+XZhxEREREREQ6qdgLQRAREREREVUETJqIiIiIiIgKwXXDiYioQsqQZUM+LkCw+tKysgSri4iIdAuTJiIiqpCMJPp49YobIBMR0cdxeB4REREREVEhmDQREREREREVokjD886fP48jR47g9evXkMvleY6LRCIEBgYKFhwREREREZG2aZw0BQUFYenSpQAAS0tLGBgYlFhQREREREREukLjpGnXrl1o1KgRtmzZgqpVq5ZkTERERERERDpD4zlNz58/h7u7OxMmIiIiIiKqUDTuaapVqxZev35dkrGQDhJ6HxMiIiIiorJG46Rp0qRJWLZsGVxdXVG/fv2SjIl0iJD7mFhZVRKkHiIiIiKi0qRx0nTt2jWYmppi0KBBqFOnDqRSKUQikdo5XD2PiIiIiIjKG42TpgsXLgAArK2tkZ6ejri4uBILioiIiIiISFdonDSdOXOmJOMgIiIiIiLSSRqvnqeJN2/eCFkdERERERGR1mnc0wQAoaGhOHHiBNLS0qBQKFTlcrkcqamp+PvvvxEVFSV4kERERERERNqicdK0ZcsWrFq1Cvr6+jAzM0NiYiKsra2RlJSE9PR0GBkZYdSoUSUZKxERERERUanTOGkKCQlBo0aNsHv3biQmJqJnz57YtWsXatSogf3798PPzw/NmjUryVixYsUK3Lt3Dzt37izR+1DJkGWk4fNApaD1ERER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\n",
      "text/plain": [
       "<Figure size 1008x7056 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "create_summary_tear_sheet(lasso_factor_data);"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
